/**
 * 订单详情数据类型定义
 */

// 订单状态枚举
export enum OrderStatus {
  PENDING = 0,        // 待处理
  ACCEPTED = 1,       // 已接单
  PREPARING = 2,      // 制作中
  READY = 3,          // 待取餐
  DELIVERING = 4,     // 配送中
  COMPLETED = 5,      // 已完成
  CANCELLED = 6       // 已取消
}

// 支付状态枚举
export enum PaymentStatus {
  UNPAID = 0,        // 待支付
  PAID = 1,          // 已支付
  REFUNDED = 2,      // 已退款
  REFUNDING = 3      // 退款中
}

// 支付方式枚举
export enum PaymentMethod {
  WECHAT = 1,        // 微信支付
  ALIPAY = 2,        // 支付宝
  CASH = 3,          // 现金
  BALANCE = 4        // 余额支付
}

// 订单时间线项
export interface OrderTimelineItem {
  status: string;           // 状态标识
  operator: string;         // 操作人
  remark: string;           // 备注信息
  createTime: string;       // 创建时间
}

// 订单商品项
export interface OrderItem {
  itemId?: string;          // 商品项ID
  dishId?: string;          // 菜品ID
  dishName?: string;        // 菜品名称
  quantity?: number;        // 数量
  price?: number;           // 单价
  subtotal?: number;        // 小计
  specs?: string;           // 规格说明
}

// 用户最新订单详情
export interface UserLatestOrder {
  orderId: string;                      // 订单ID
  orderNo: string;                      // 订单编号
  merchantId: string;                   // 商家ID
  customerId: string;                   // 用户ID
  orderStatus: OrderStatus;             // 订单状态
  orderStatusText: string;              // 订单状态文本
  paymentStatus: PaymentStatus;         // 支付状态
  paymentStatusText: string;            // 支付状态文本
  paymentMethod: PaymentMethod;         // 支付方式
  paymentMethodText: string;            // 支付方式文本
  totalAmount: number;                  // 订单总金额
  totalAmountFormatted: string;         // 格式化的总金额
  discountAmount: number;               // 优惠金额
  discountAmountFormatted: string;      // 格式化的优惠金额
  regionSubsidy?: number;               // 区域补贴
  finalAmount: number;                  // 实付金额
  finalAmountFormatted: string;         // 格式化的实付金额
  addressSnapshot: string;              // 配送地址快照
  remark?: string;                      // 订单备注
  estimatedReadyMin?: string;           // 预计准备时间(分钟)
  pickupCode?: string;                  // 取餐码
  orderTime: string;                    // 下单时间
  paidAt?: string;                      // 支付时间
  finishedAt?: string | null;           // 完成时间
  canceledAt?: string | null;           // 取消时间
  orderItems: OrderItem[];              // 订单商品列表
  orderTimeline: OrderTimelineItem[];   // 订单时间线
}
